package com.sxj.corejava.code04_循环结构;

import java.util.Scanner;

/**
 * @author 石小俊
 * 2024年07月09日 16:24
 * 斐波那契数列: 1 1 2 3 5 8 13 ... N, 前两项之和等于第三项
 * 在控制输入需要打印几个数, 输出对应数量的数字
 */
public class Test07_斐波那契数列 {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.print("请输入斐波那契数列的数量:");
        int num = sc.nextInt();
        if (num == 1) {
            System.out.println("1");
        }
        if (num >= 2) {
            // 打印前两位
            System.out.print("1 1 ");
            // 打印后面的
            // 前两项之和=第三项
            // 打印第三项到第n项
            // 假设打印的是第n项
            // n-1项+n-2项=n项
            int a = 1;  // n-2
            int b = 1;  // n-1
            for (int i = 3; i <= num; i++) {
                // 获取第n项
                int n = a + b;
                // 如果获取第n+1项
                // 首先获取(n+1)-2项以及(n+1)-1项
                // 此时重新为基于n+1项的数值获取它的前一项与前两项
                // 前两项=原来的前一项
                a = b;
                // 前一项=原来的n项
                b = n;
                System.out.print(n + " ");
            }
        }
    }

}
